package cn.lijiguo.concurrency.part1.uncaughtexception;

/**
 * CantCacheDirectly
 * 演示 无法捕获子线程的异常
 * 1 不加 try cache 启动 4 个线程 并都抛出异常 都带线程的名字
 * 2 加了 try cache ，期望捕获到第一个线程抛出的异常之后，线程 2 3 4 都停止执行 希望看到打印出 Caught Exception
 * 3 执行时发现，根本没有 Caught Exception 线程 2 3 4 依然运行并抛出异常
 *
 * 此示例说明线程的异常不能使用传统方法捕获
 *
 * @author lijiguo
 * @date 2020/1/7 16:17
 */
public class CantCacheDirectly implements Runnable {

    public static void main(String[] args) throws InterruptedException {
        try {
            new Thread(new CantCacheDirectly(), "t1").start();
            Thread.sleep(300);
            new Thread(new CantCacheDirectly(), "t2").start();
            Thread.sleep(300);
            new Thread(new CantCacheDirectly(), "t3").start();
            Thread.sleep(300);
            new Thread(new CantCacheDirectly(), "t4").start();
        } catch (RuntimeException e) {
            System.out.println("Caught Exception");
        }
    }

    @Override
    public void run() {
        throw new RuntimeException("子线程抛出异常");
    }
}
